%module fp
%{
int add(int a, int b);
int sub(int a, int b);
int calc(int a, int b, int (*pfn)(int, int));
typedef struct _shape{
	char* name;
	void (*draw)(struct _shape *);
} SHAPE;
void draw_cicle(SHAPE *shape);
void draw_line(SHAPE *shape);
int update(SHAPE *shape);
%}

%callback("%s_cb");
int add(int a, int b);
int sub(int a, int b);
%nocallback;
int calc(int a, int b, int (*pfn)(int, int));


typedef struct _shape{
	char* name;
	void (*draw)(struct _shape *);
} SHAPE;
%callback("%s_cb");
void draw_cicle(SHAPE *shape);
void draw_line(SHAPE *shape);
%nocallback;
int update(SHAPE *shape);
// typedef struct {
// 	int a;
// 	int b;
// 	int (*add_pfn)(int, int);
// 	int (*sub_pfn)(int, int);
// } CALC_EXT;
// 
//int run(CALC_EXT* calc_ext);
//  %constant int add(int a, int b);
//  %constant int sub(int a, int b);
